#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2022/12/23 16:16
# @Author  : afraidbenq
# @File    : main.py
# @Software: PyCharm
# @Github  : github/afraidbenq
# @Email   : 329189987@qq.com
# @Desc    :
import os
import configparser

import pytest

from common import logger
from util.generator.case_generator import TestCaseAutomaticGeneration

"""
使用pytest.main运行的条件：
1、pytest的配置文件放在项目的根目录下，文件名需要命名为：pytest.ini
2、搭建jdk环境：https://www.cnblogs.com/zll-wyf/p/15095664.html allure 是一个java测试报告框架。所以要基于JDK环境
3、安装allure：https://blog.csdn.net/m0_49225959/article/details/117194318  cmd allure --version 验证是否安装成功
4、安装插件 pip install allure-pytest

pytest.main运行过程：
1、pytest_configure
2、pytest_sessionstart
3、pytest_collection
4、pytest_runtestloop
5、pytest_sessionfinish
6、pytest_unconfigure
"""

if __name__ == '__main__':
    logger.info(
        f"""
 ______            __                       ___                            
/\__  _\          /\ \__                  /'___\                           
\/_/\ \/      ___ \ \ ,_\     __   _ __  /\ \__/    __       ___      __   
   \ \ \    /' _ `\\\\ \ \/   /'__`\/\`'__\\\\ \ ,__\ /'__`\    /'___\  /'__`\\ 
    \_\ \__ /\ \/\ \\\\ \ \_ /\  __/\ \ \/  \ \ \_//\ \L\.\_ /\ \__/ /\  __/ 
    /\_____\\\\ \_\ \_\\\\ \__\\\\ \____\\\\ \_\   \ \_\ \ \__/.\_\\\\ \____\\\\ \____\\
    \/_____/ \/_/\/_/ \/__/ \/____/ \/_/    \/_/  \/__/\/_/ \/____/ \/____/                                                                                                                                  
                ______                  __                                                                                                                                                               
               /\__  _\                /\ \__  __                                                                                                                                                     
               \/_/\ \/     __     ____\ \ ,_\/\_\     ___       __                                                                                                                                   
                  \ \ \   /'__`\  /',__\\\\ \ \/\/\ \  /' _ `\   /'_ `\                                                                                                                                  
                   \ \ \ /\  __/ /\__, `\\\\ \ \_\ \ \ /\ \/\ \ /\ \L\ \                                                                                                                                 
                    \ \_\\\\ \____\\\\/\____/ \ \__\\\\ \_\\\\ \_\ \_\\\\ \____ \                                                                                                                                   
                     \/_/ \/____/ \/___/   \/__/ \/_/ \/_/\/_/ \/___L\ \                                                                                                                             
                                                                 /\____/                                                                                                                            
                                                                 \_/__/          Larry 3D Release {"V2.0.0."} Powered By OuHuang-Ben
        """
    )
    # 设置项目名称、环境
    project_name = "example_project"
    env = "test"
    # 根据项目配置的接口文档地址，同步最新API信息，同时生成测试用例模版

    # 判断现有的测试用例，如果未生成测试代码，则自动生成
    # TestCaseAutomaticGeneration(project_name).gen_case_automatic()

    # pytest.main([f'-s', '-W', 'ignore:Module already imported:pytest.PytestWarning',  # 忽略错误
    #              # f'-k', 'test_admin_setting',  # 指定运行测试用例
    #              # f'-k', 'test_api',  # 指定小程序接口
    #              f'-k', 'test_example_interface',  # 指定小程序接口
    #              f'--env={env}',  # 环境参数
    #              f'--project={project_name}',  # 项目名
    #              '--alluredir=report/tmp', "--clean-alluredir"])  # 清空之前的报告 + 生成报告到./report/tmp
    # """
    #                    -h: 显示帮助信息和参数列表
    #                    -k: 选项允许你使用表达式指定希望运行的测试用例 -k "test_one or test_two"
    #                    -m: 指定运行被标记的用例 "-m=web"
    #                    -n: xdist多进程并发 "-n 2"
    #                    -q: 简化输出信息与 -v相反 可以与--tb=line（进打印异常代码的位置）结合使用
    #                    -s: 打印出代码中的print中的内容 等价于 pytest --capture=no 可以捕获print函数的输出
    #                    -v(--verbose): 显示错误位置以及错误的详细信息
    #                    -x: 一旦错误，则停止运行
    #                    --lf(--last-failed): 重跑上次失败的所有测试用例，如果没有失败就重跑全部。
    #                    --ff(--failed-first): 会首先运行上一次失败的测试用例，然后才会运行剩下被选中的所有的测试用例。
    #                    --tb=style：决定捕捉到失败时输出信息的显示方式 --tb=no --tb=line --tb=short --tb=long --tb=auto --tb=native
    #                    --exitfirst: 一旦错误，则停止运行
    #                    --reruns: 失败重跑次数  "--reruns=3", "--reruns-delay=2"
    #                    --count: 重复执行次数  "--count=4"
    #                    --co(--collect-only)：查看当前配置下，哪些用例会被执行，一般在测试运行前做检查
    #                    --maxfail=num: 设置最大失败次数，当超出这个阈值时，则不会在执行测试用例 "--maxfail=1"
    #                    --durations=1: 显示耗时最多的1个用例
    #
    # """
    # 复制allure的环境变量、执行人文件到临时目录
    # os.system(r"copy report\allure\environment.properties report\tmp")
    # os.system(r"copy report\allure\executor.json report\tmp")
    # 最好使用该命令生成测试报告（与Jenkins上allure插件生成测试报告一致）
    # os.system(r"allure generate report\tmp -c -o report\allure-report")
    # 打开生成的报告，查看。
    # os.system(r"allure open report\allure-report")
    # 打开生成的报告，可对外提供在线展示。【在本机开启一个allure服务，其他主机可通过IP地址和端口号远程查看allure报告】
    # os.system(r"allure serve report\allure-report -p 20059")
